package threadsAssign3; public class Simulator implements Runnable{ private static int minArrivalInterval = 1; //minimum arrival interval between clients private static int maxArrivalInterval = 1; //maximum arrival interval between clients private static int threshold = 3; private static int maxNrOfServers = 10; private static int finishTime = 10; private static int minProcessTime = 1; private static int maxProcessTime = 5; private static float averageWaitingTime = 0; private static int averageWaitingTimeCounter = 0; private static float serviceTime = 0; private static float serviceTimeCounter = 0; private static int peakHour = 0; private static int peakHourTasks = 0; private static int currentTime = 0; private static int timeToGenerateTask = 1; private static Scheduler scheduler; private static SimulatorFrame simulatorFrame; public static void main(String[] args) { //MAIN simulatorFrame = new SimulatorFrame(); } @Override public void run() { while (currentTime < finishTime) { currentTime++; if (timeToGenerateTask == currentTime) { timeToGenerateTask += (int) (Math.random() * (maxArrivalInterval - minArrivalInterval) + minArrivalInterval); int processTime = (int) (Math.random() * (maxProcessTime - minProcessTime) + minProcessTime); Task task = new Task(currentTime, processTime); EventsLog.log(String.format(task.toString() + " arrived")); scheduler.dispatchTaskOnServer(task); computeServiceTime(processTime); } simulatorFrame.displayData(scheduler.getTasksFromScheduler()); simulatorFrame.showCurrentTime(); computePeakHour(); sleep(); } while(!scheduler.isDone()) { finishTasks(); } simulatorFrame.displayData(scheduler.getTasksFromScheduler()); simulatorFrame.showReports(averageWaitingTime, serviceTime, peakHour); sleep(); EventsLog.close(averageWaitingTime, serviceTime, peakHour); } private void sleep() { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } private void finishTasks() { currentTime++; simulatorFrame.displayData(scheduler.getTasksFromScheduler()); simulatorFrame.showCurrentTime(); sleep(); } public static int getThreshold() { return threshold; } public static void setThreshold(int threshold) { Simulator.threshold = threshold; } public static int getMaxNrOfServers() { return maxNrOfServers; } public static void setMaxNrOfServers(int maxNrOfServers) { Simulator.maxNrOfServers = maxNrOfServers; } public static void setMinArrivalInterval(int minArrivalInterval) { Simulator.minArrivalInterval = minArrivalInterval; } public static void setMaxArrivalInterval(int maxArrivalInterval) { Simulator.maxArrivalInterval = maxArrivalInterval; } public static void setFinishTime(int finishTime) { Simulator.finishTime = finishTime; } public static void setMinProcessTime(int minProcessTime) { Simulator.minProcessTime = minProcessTime; } public static void setMaxProcessTime(int maxProcessTime) { Simulator.maxProcessTime = maxProcessTime; } public static void setScheduler(Scheduler scheduler) { Simulator.scheduler = scheduler; } public static void computeAverageWaitingTime(int arrivalTime){ int waitTime = currentTime - arrivalTime; averageWaitingTime = ((averageWaitingTimeCounter * averageWaitingTime) + waitTime) / ++averageWaitingTimeCounter; } public static void computeServiceTime(int processTime){ serviceTime = ((serviceTimeCounter * serviceTime) + processTime) / ++serviceTimeCounter; } private void computePeakHour(){ if (scheduler.nrOfTasks() > peakHourTasks) { peakHour = currentTime; peakHourTasks = scheduler.nrOfTasks(); } } public static int getCurrentTime() { return currentTime; } public static void resetParameters() { setMinArrivalInterval(1); setMaxArrivalInterval(1); setMinProcessTime(1); setMaxProcessTime(5); setMaxNrOfServers(10); setThreshold(3); setFinishTime(10); averageWaitingTime = 0; averageWaitingTimeCounter = 0; serviceTime = 0; serviceTimeCounter = 0; peakHour = 0; peakHourTasks = 0; currentTime = 0; timeToGenerateTask = 1; Scheduler.resetNrOfOpenServers(); Scheduler.resetServers(); } }